#作业1：将‘123.456’转成浮点数
from functools import reduce
set1=[(str(i),i) for i in range(10)]
print(set1)
b=dict(set1)
b['.']=0.1   #得到字典
temp=10;count=0;
def fun2(x,y):
    global temp,count
    if y==0.1:   #当碰到小数点的时候
        temp=1;count+=1;
        return x
    if count>1:
        print("输入的数据有误")   #针对123.456.789
        exit();
    if temp==10:   #小数点之前的数
        return x*temp+y
    else:    #小数点之后的数
        temp=temp*0.1
        return x+y*temp
def str22int(a):
    return reduce(fun2,map(lambda x:b.get(x),a))
print(str22int('123.456'))

#作业3：map批量检测用户名是否符合规范：
username=["ash21tgsdav","asg126735sdf_","asgsad&%$@",'15shbdh.4',"af142"];  #用户名列表
def f1(a):
    import re
    if (re.findall('^[a-zA-Z_][\d\w]{5,17}$',a))!=[]:
        return "{}符合规范".format(a)
    else:
        return "{}不符合规范".format(a)
ab=map(f1,username)
print(list(ab))
#filter将合法的用户显示出来：
username=["ash21tgsdav","asg126735sdf_","asgsad&%$@",'15shbdh.4',"af142"];  #用户名列表
def f2(a):
    import re
    if (re.findall('^[a-zA-Z_][\d\w]{5,17}$',a))!=[]:
        result = a
    else:
        result=None
    return result
print(list(filter(f2,username)))
#匿名函数加reduce实现1*2*3*...*n
n=eval(input("请输入阶乘的数字(几的阶乘):"))
print(reduce(lambda x,y:x*y,range(1,n+1)))
#filter函数找出[0-100]以内能被3整除的数
print(list(filter(lambda x:x%3==0 ,range(1,100))))
#map函数求1-10各项的平方
print(list(map(lambda x:x*x,range(1,11))))
#将列表[1,4,5,9]转换成1459的字符串
list2=[1,4,5,9]
print(reduce(lambda a,b:str(a)+str(b),list2))


#有以下列表：list1=[7,-8,5,4,0,-2,5],正数在前，负数在后，正数从小到大，负数从大到小
list1=[7,-8,5,4,0,-2,5]
print(sorted(list(filter(lambda x:x>0,list1)))+sorted(list(filter(lambda x:x<0,list1)),reverse=True))  #0不输出
#字符串排序，小写<大写<奇数<偶数
s='asdf234GDSdsf23'
print("".join(sorted(filter(lambda x:x.islower(),s)))+"".join(sorted(filter(lambda x:x.islower(),s)))+"".join(sorted(filter(lambda x:x in "13579" ,s)))+"".join(sorted(filter(lambda x:x in "02468" ,s))))
